package chapter9;

import com.alibaba.fastjson.JSON;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

import java.util.HashMap;

public class Subscriber extends JedisPubSub {
    /**
     * 主函数入口
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 创建一个订阅者实例
        Subscriber subscriber = new Subscriber();
        // 连接到本地的Redis服务器
        Jedis jedis = new Jedis("localhost", 6379);
        // 订阅名为"MQChannel"的频道
        jedis.subscribe(subscriber, "MQChannel");
    }


    @Override
    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println("subscribe the channel" + channel);
    }

    @Override
    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println("unsubscribe the channel" + channel);
    }

    /**
     * 接收并处理来自指定频道的消息
     * 该方法通过解析接收到的消息内容，将其转换为HashMap对象，以便后续处理
     * 主要用于演示如何从消息中提取订单信息并进行相关操作
     *
     * @param channel 消息所属的频道，用于标识消息的来源
     * @param message 原始的字符串消息内容，通常为JSON格式字符串，包含订单信息
     */
    @Override
    public void onMessage(String channel, String message) {
        // 将消息内容解析为HashMap对象，以便于访问其中的特定字段
        HashMap<String, String> orderMap = JSON.parseObject(message, HashMap.class);

        // 从订单Map中获取并打印订单的ID、所有者和账户信息
        System.out.println("id=" + orderMap.get("id"));
        System.out.println("owner=" + orderMap.get("owner"));
        System.out.println("amount=" + orderMap.get("amount"));
    }

}
